
function curry(fn,...args){//接收需进行柯里化的函数体和已接收的参数
    if(args.length<fn.length){//如果已接受的参数个数小于函数该接收的参数则返回函数体
        return (...args2)=>{//接收第二次的传参
            return curry(fn,...args,...args2)//进行递归
        }
    }
    return fn(...args)//如果已接受的参数个数大于等于函数该接收的参数则返回函数执行结果
}
// 示例1：纯函数柯里化（不依赖this）
function add(a, b, c) {
  return a + b + c;
}

const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 6
console.log(curriedAdd(1, 2)(3)); // 6

// 示例2：依赖this的函数（需要特别注意）
const obj = {
  value: 10,
  multiply: function(x, y) {
    return this.value * x * y;
  }
};

// 正确做法：先绑定this再柯里化
const boundMultiply = obj.multiply.bind(obj);
const curriedMultiply = curry(boundMultiply);
console.log(curriedMultiply(2)(3)); // 60

// 错误做法：直接柯里化方法（会丢失this）
const directCurried = curry(obj.multiply);
// console.log(directCurried(2)(3)); // 会出错，this指向错误